import java.util.Arrays;
import java.util.Random;

public class Text {
    public static void main1(String[] args) {
        int[] array = {6,23,3,72,17,9,27,51,24,8,18,39,62};
//        Sort.insertSort1(array);
//        System.out.println(Arrays.toString(array));
        Sort.insertSort(array);
        System.out.println(Arrays.toString(array));
    }

    //随着数组有序的程度越高，插入排序速度越快

    //生成从小到大的数组：
    public static void initOrder(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i];
        }
    }

    //生成乱序的数组：
    public static void randomOrder(int[] arr){
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            //10万的写法：
            arr[i] = random.nextInt(10_0000);
        }
    }

    //生成从大到小的数组：
    public static void reverseOrder(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr.length - i;
        }
    }

    //测试不同有序程度的数组，插入排序的时间差异
    public static void testInsertSort(int[] arr){
        arr = Arrays.copyOf(arr,arr.length);
        long startTime = System.currentTimeMillis();
        Sort.insertSort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("插入排序所需时间为："+(endTime - startTime));
    }

    public static void testSelectSort(int[] arr){
        arr = Arrays.copyOf(arr,arr.length);
        long startTime = System.currentTimeMillis();
        Sort.selectSort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("选择排序所需时间为："+(endTime - startTime));
    }

    public static void main2(String[] args) {
        int[] arrays = new int[10_0000];
        //initOrder(arrays);//生成一个有序的数组
        //randomOrder(arrays);//生成一个乱序的数组
        reverseOrder(arrays);//生成一个逆序的数组
        testInsertSort(arrays);
    }

    public static void main3(String[] args) {
        int[] arr = {1,52,62,5,37,22,28,47,18,6};
        Sort.selectSort(arr);
        System.out.println();
    }

    public static void main4(String[] args) {
        int[] array = {1,6,23,86,31,12,4,9,11};
//      Sort.shellSort(array);
//        Sort.selectSort1(array);
        Sort.heapSort(array);
        System.out.println(Arrays.toString(array));
    }

    public static void main(String[] args) {
        int[] arr = {6,1,98,67,136,27,18,4,3,2};
        //Sort.quickSort(arr);
        //Sort.quickSort1(arr);
        //Sort.mergeSort(arr);
        Sort.mergeSort1(arr);
        System.out.println(Arrays.toString(arr));
    }
}
